/**
 * @brief 演示线程间共享全局变量被优化的问题。
 * 编译：g++ a.cpp -O2 -g --std=c++11 -lpthread
 * 优化后的fun函数：
   0x0000000000400d10 <+0>:	movzbl 0x201391(%rip),%eax        # 0x6020a8 <run_flag>
   0x0000000000400d17 <+7>:	nopw   0x0(%rax,%rax,1)
   0x0000000000400d20 <+16>:	test   %al,%al
   0x0000000000400d22 <+18>:	jne    0x400d20 <fun()+16>
   0x0000000000400d24 <+20>:	repz retq 
   程序执行时会在下面这两条指令中循环：
   test   %al,%al
   jne    0x400d20 <fun()+16>
   所以另外一个线程修改run_flag没有效果
 */

#include<thread>
#include<iostream>
#include<unistd.h>
#include<atomic>

bool run_flag{ true };

void fun(void)
{
        while (run_flag)
        {
        }
}

int main(void)
{
        std::thread  t1(fun);
        sleep(3);
        run_flag = false;
        t1.join();
}
